home *** CD-ROM | disk | FTP | other *** search
/ Celestin Apprentice 2 / Apprentice-Release2.iso / Source Code / Peter Lewis / PNL Libraries / MyBasicMenus.p < prev    next >
Encoding:
Text File  |  1993-07-07  |  1.9 KB  |  100 lines  |  [TEXT/PJMM]

  1. unit MyBasicMenus;
  2.  
  3. interface
  4.  
  5.     type
  6.         menuReturn = (MR_None, MR_Handled, MR_About, MR_Quit);
  7.  
  8.     procedure InitBasicMenus (about, filem, quitm: str255);
  9.     procedure FinishBasicMenus;
  10.     function HandleBasicMenuEvents (var er: eventRecord): menuReturn;
  11. { returns true if we handle it }
  12.  
  13. implementation
  14.  
  15.     procedure InitBasicMenus (about, filem, quitm: str255);
  16.         var
  17.             mh: MenuHandle;
  18.     begin
  19.         mh := NewMenu(128, chr(20));
  20.         AppendMenu(mh, about);
  21.         AppendMenu(mh, '(-');
  22.         AddResMenu(mh, 'DRVR');
  23.         InsertMenu(mh, 0);
  24.         mh := NewMenu(129, filem);
  25.         AppendMenu(mh, quitm);
  26.         InsertMenu(mh, 0);
  27.         DrawMenuBar;
  28.     end;
  29.  
  30.     procedure FinishBasicMenus;
  31.     begin
  32.     end;
  33.  
  34.     function HandleBasicMenuEvents (var er: eventRecord): menuReturn;
  35.         var
  36.             didit: menuReturn;
  37.         procedure DoMenu (mResult: longInt);
  38.             var
  39.                 mMenu, mItem: integer;
  40.                 DAName: str255;
  41.                 oe: OSErr;
  42.         begin
  43.             mMenu := HiWord(mResult);
  44.             mItem := LoWord(mResult);
  45.             case mMenu of
  46.                 128:  begin
  47.                     if mItem = 1 then begin
  48.                         didit := MR_About;
  49.                     end
  50.                     else begin
  51.                         didit := MR_Handled;
  52.                         GetItem(GetMHandle(128), mItem, DAName);
  53.                         oe := OpenDeskAcc(DAName);
  54.                         HiliteMenu(0);
  55.                     end;
  56.                 end;
  57.                 129: 
  58.                     didit := MR_Quit;
  59.                 otherwise
  60.                     ;
  61.             end;
  62.         end;
  63.         var
  64.             twp: windowPtr;
  65.             mResult: longInt;
  66.             code: integer;
  67.             ch: char;
  68.     begin
  69.         didit := MR_None;
  70.         mResult := 0;
  71.         case er.what of
  72.             MouseDown:  begin
  73.                 code := FindWindow(er.where, twp);
  74.                 case code of
  75.                     inMenuBar:  begin
  76.                         mResult := MenuSelect(er.where);
  77.                         didit := MR_Handled;
  78.                     end;
  79.                     otherwise
  80.                         ;
  81.                 end;
  82.             end;
  83.  
  84.             keyDown:  begin
  85.                 ch := chr(BAND(er.message, CharCodeMask));
  86.                 if BAND(er.modifiers, CmdKey) <> 0 then begin
  87.                     mResult := MenuKey(ch);
  88.                     didit := MR_Handled;
  89.                 end;
  90.             end;
  91.  
  92.             otherwise
  93.         end;
  94.         if mResult <> 0 then begin
  95.             DoMenu(mResult);
  96.         end;
  97.         HandleBasicMenuEvents := didit;
  98.     end;
  99.  
  100. end.